﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("请输入方案选项：1.偶数下标数组 2.foreach统计字符 3.数组统计和和平均值 4.数组排序 5.数组元素 6.九九乘法表 7.空心正方形 8.菱形 9.实心正方形 10.杨辉三角形 11.数组排序 ");
                int key = int.Parse(Console.ReadLine());
                switch (key)
                {
                    case 1:
                        Oushu();
                        break;
                    case 2:
                        Foreach();
                        break;
                    case 3:
                        double[] arr = new double[5];
                        Console.WriteLine("请输入第一个学生的成绩：");
                        arr[0] = double.Parse(Console.ReadLine());
                        Console.WriteLine("请输入第二个学生的成绩：");
                        arr[1] = double.Parse(Console.ReadLine());
                        Console.WriteLine("请输入第三个学生的成绩：");
                        arr[2] = double.Parse(Console.ReadLine());
                        Console.WriteLine("请输入第四个学生的成绩：");
                        arr[3] = double.Parse(Console.ReadLine());
                        Console.WriteLine("请输入第五个学生的成绩：");
                        arr[4] = double.Parse(Console.ReadLine());

                        Exicte(arr);
                        break;
                    case 4:
                        shuzupaixu();
                        break;
                    case 5:
                        shuzuyuansu();
                        break;
                    case 6:
                        jiujiu();
                        break;
                    case 7:
                        nullzfx();
                        break;
                    case 8:
                        lx();
                        break;
                    case 9:
                        shixinzfx();
                        break;
                    case 10:
                        YHsjx();
                        break;
                    case 11:
                        shuzupx();
                        break;
                    default:
                        Console.WriteLine("输入错误，请重新输入！");
                        break;
                }
            }
        }
        static void Oushu()
        {
            //在 Main 方法中创建一个字符串类型的数组，并存入 5 个值，然后将数组中下标是偶数的元素输出。
            String[] arr = new String[5];
            arr[0] = "1"; arr[1] = "2"; arr[2] = "3"; arr[3] = "4"; arr[4] = "5";

            for (int i = 0; i < arr.Length; i++)
            {
                if (i % 2 == 0)
                {
                    Console.WriteLine("元素下标为偶数的元素有：" + arr[i]);
                }
                else
                {

                }
                Console.WriteLine();
            }
        }
        static void Foreach()
        {
            //输入一行字符串，分别统计出其中英文字母、数字、空格的个数。
            String arr = "vfdsgxb se32 4131 354erg";
            int zifu = 0;
            int shuzi = 0;
            int fuhao = 0;
            foreach (char a in arr)
            {
                if (char.IsDigit(a))
                {
                    zifu++;
                }
                else if (char.IsLetter(a))
                {
                    shuzi++;
                }
                else if (char.IsWhiteSpace(a))
                {
                    fuhao++;
                }
            }
            Console.WriteLine("字符串中英文字母有{0}个，数字有{1}个，空格有{2}个", zifu, shuzi, fuhao);
        }
        static void Exicte(Double[] ab)
        {
            //在 Main 方法中创建一个 double 类型的数组，并在该数组中存入 5 名学生的考试成绩(控制台输入),
            //计算总成绩和平均成绩。要求使用foreach语句实现该功能
            double sum = 0;
            double avg = 0;
            foreach (double item in ab)
            {
                sum = sum + item;
            }
            avg = sum / 5;
            Console.WriteLine("总成绩为：" + sum + "分，" + "平均成绩为：" + avg + "分");

        }
        static void shuzupaixu()
        {
            //定义一个方法，实现一维数组的排序功能，从大到小排序。(不要用Array类的方法)
            int[] arr = { 1, 12, 22, 99, 4, 5 };
            Console.WriteLine("排序前：");
            Paixu(arr);
            px(arr);
        }
        static void px(int[] a)
        {
            int bottom;
            for (int i = 0; i < a.GetLength(0) - 1; i++)

            {

                for (int j = 0; j < a.GetLength(0) - 1 - i; j++)

                {

                    if (a[j] < a[j + 1])

                    {

                        bottom = a[j];

                        a[j] = a[j + 1];

                        a[j + 1] = bottom;

                    }
                }
            }
            //for (int star = 0,end = a.Length - 1; star < end; star++, end--)
            //{
            //        bottom = a[star];
            //        star = a[end];
            //        end = bottom;
            //    }
            Console.WriteLine("从大到小排序后：");
            Paixu(a);
        }
        static void shuzuyuansu()
        {
            //实现查找数组元素索引的功能。
            //定义一个数组，然后控制台输入要查找的元素，返回输入值在数组中最后一次出现的位置。若是找不到，请打印找不到。
            String[] shuzu = { "123", "滴答", "abc", "11", "22", "66", "123", "abc", "11" };
            int b = shuzu.Length - 1;
            Console.WriteLine("请输入所要查找的元素：");
            String a = Console.ReadLine();
            int index = -1;
            for (int i = b; i > -1; i--)
            {
                if (a == shuzu[i])
                {
                    index = i;
                    break;
                }
            }
            if (index != -1)
            {
                Console.WriteLine("元素 " + shuzu[index] + " 最后一次出现的位置在第 " + (index + 1) + " 的位置");
            }
            else
            {
                Console.WriteLine("找不到");
            }
        }
        static void jiujiu()
        {
            //1 * 1 = 1
            //2 * 1 = 2   2 * 2 = 4
            //3 * 1 = 3   3 * 2 = 6   3 * 3 = 9
            //4 * 1 = 4   4 * 2 = 8   4 * 3 = 12  4 * 4 = 16
            //5 * 1 = 5   5 * 2 = 10  5 * 3 = 15  5 * 4 = 20  5 * 5 = 25
            //6 * 1 = 6   6 * 2 = 12  6 * 3 = 18  6 * 4 = 24  6 * 5 = 30  6 * 6 = 36
            //7 * 1 = 7   7 * 2 = 14  7 * 3 = 21  7 * 4 = 28  7 * 5 = 35  7 * 6 = 42  7 * 7 = 49
            //8 * 1 = 8   8 * 2 = 16  8 * 3 = 24  8 * 4 = 32  8 * 5 = 40  8 * 6 = 48  8 * 7 = 56  8 * 8 = 64
            //9 * 1 = 9   9 * 2 = 18  9 * 3 = 27  9 * 4 = 36  9 * 5 = 45  9 * 6 = 54  9 * 7 = 63  9 * 8 = 72  9 * 9 = 81

            for (int i = 1; i < 10; i++)
            {
                for (int j = 1; j < 10; j++)
                {
                    if (i >= j)
                    {
                        Console.Write(i + "*" + j + "=" + (i * j) + "\t");
                    }

                }
                Console.WriteLine();
            }

        }
        static void nullzfx()
        {
            //            用户输入正方形边长，用* 打印出空心正方形。

            //如：用户输入5，则输出如下图形。
            //*****
            //**
            //**
            //**
            //*****
            Console.WriteLine("请输入正方形的边长：");
            int a = int.Parse(Console.ReadLine());
            for (int i = 0; i < a; i++)
            {
                for (int j = 0; j < a; j++)
                {
                    if (i == 0 || i == a - 1 || j == 0 || j == a - 1)
                    {
                        Console.Write(" *");
                    }
                    else
                    {
                        Console.Write("  ");
                    }

                }
                Console.WriteLine();
            }
        }
        static void lx()
        {
            //            *
            //           ***
            //          *****
            //           ***
            //            *

            //          边长是3
            //行列数就是5
            Console.WriteLine("请输入菱形的边长：");
            int b = int.Parse(Console.ReadLine());

            for (int i = 1; i <= 2 * b - 1; i++)
            {
                for (int j = 1; j <= 2 * b - 1; j++)
                {
                    if (b < i && j > i - b && j <= 3 * b - i - 1)
                    {
                        Console.Write("*");
                    }
                    else if (b >= i && j > b - i && j < b + i)
                    {
                        Console.Write("*");
                    }
                    else
                    {
                        Console.Write(" ");
                    }
                }
                Console.WriteLine();
            }
        }
        static void shixinzfx()
        {
            //            用户输入正方形边长，用* 打印出实心正方形。

            //如：用户输入5，则输出如下图形。
            //*****
            //*****
            //*****
            //*****
            //*****
            Console.WriteLine("请输入正方形的边长：");
            int c = int.Parse(Console.ReadLine());
            for (int i = 0; i < c; i++)
            {
                for (int j = 0; j < c; j++)
                {
                    Console.Write(" *");
                }
                Console.WriteLine();
            }

        }
        static void YHsjx()
        {
            //打印杨辉三角形（要求打印10行），如下所示：（使用二维数组）
            //1
            //1    1
            //1    2    1
            //1    3    3   1
            //1    4    6   4    1
            //1    5    10  10   5   1
            int[][] arr = new int[6][];
            for (int i = 1; i < 2 * arr.Length - 1; i++)
            {
                for (int j = 1; j < 2 * arr.Length; j++)
                {
                    if (arr.Length >= i && j > arr.Length - i && j < arr.Length + i)
                    {
                        Console.Write(i + " ");
                    }
                    else
                    {
                        Console.Write("  ");
                    }
                }
                Console.WriteLine();
            }
        }
        static void shuzupx()
        {
            //如果一个数组保存元素是有序的（从大到小），向这个数组中插入一个数，使得插入后的数组元素仍然保持有序。
            int[] arr = { 99, 66, 59, 48, 20 };
            int[] arry = new int[arr.Length + 1];
            arry = arr;
            int a;
            int index = -1;
            Console.WriteLine("排序前：");
            Paixu(arr);

            Console.WriteLine("请输入一个数：");
            int num = int.Parse(Console.ReadLine());
            for (int i = arry.Length - 1; i >= 0; i--)
            {
                if (arry[i] == num)
                {
                    index = i;
                    break;
                }
                else if (arry[i] != num)
                {
                    if (i == 0)
                    {
                        index = -1;
                    }
                }
            }
            for (int i = 0; i < arr.Length; i++)
            {
                if (num > arry[i])
                {
                    index = i;
                    break;
                }
            }
            if (index != -1)
            {
                for (int i = 0; i < arry.Length; i++)
                {
                    if (i < index)
                    {
                        arry[i] = arr[i];
                    }
                    if (i == index)
                    {
                        arry[i] = num;
                    }
                    if (i > index)
                    {
                        arry[i] = arr[i - 1];
                    }
                }
            }
            else
            {
                for (int i = 0; i < arry.Length; i++)
                {
                    if (i == arry.Length - 1)
                    {
                        arry[i] = num;
                    }
                    else
                    {
                        arry[i] = arr[i];
                    }
                }
                Console.WriteLine("排序后：");
                Paixu(arry);
            }
        }
            static void Paixu(int[]a) {
                Console.Write("[");
                for (int l = 0; l < a.Length; l++)
                {
                    if (l == a.Length - 1)
                    {
                        Console.Write(a[l]);
                    }
                    else
                    {
                        Console.Write(a[l] + ",");
                    }
                }
                Console.WriteLine("]");
            }
        }     
    }

